/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package id3tagger.ui;


import id3tagger.Song;
import id3tagger.SongDB;
import id3tagger.db.DBManager;
import id3tagger.db.QueryGenerator;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
import javax.swing.SwingUtilities;
import java.awt.datatransfer.*; 
import java.io.File;
import java.util.*;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileSystemView;




/**
 *
 * @author Lynz
 */

public class FenetreID3 extends JFrame
{
     //Container
    private Container c;
    private FenetreID3 self;

    //Reponse du RadioButton
    private String reponseRadioButton;

    //Base de données
    DBManager dbm;
    ListListener listL;

    //Noms des colonnes
    private String titleGenre = "Genre";
    private String titleArtiste = "Artiste";
    private String titleAlbum = "Album";
    private String titleTitre = "Titre";
	
    //La creation d'une bibliotheque de musique sous forme d'un tableau
    private JTable tableGenre;
    private JTable tableArtiste;
    private JTable tableAlbum;
    private JTable tableTitre;

    //Modèle de table pour les JTable
    private ModeleTableAffichage modeleGenre;
    private ModeleTableAffichage modeleArtiste;
    private ModeleTableAffichage modeleAlbum;
    private ModeleTableTitre modeleTitre;

    //Fichier racine de la bibliothèque
    private File libraryRoot;

    //JTextArea en fin de fenetre pour l'affichage des musiques
    private JTextArea ta;

	//Texte a copier
	private String textCopier;
	
	//PopupMenu du click droit
	private JPopupMenu popup;

	//MenuItem du PopupMenu
	private JMenuItem itemBox1;
	private JMenuItem itemBox2;
	
	//Variable permettant le copiage par la souris
	private Clipboard clipboard;
	private StringSelection ss;

        private ArrayList <String> selectedArtists;
        private ArrayList <String> selectedGenres;
        private ArrayList <String> selectedAlbums;
        private ArrayList <Song>   selectedTitres;
   

    //Arraylist permettant de sauvegarder les lignes selectionnee
    private ArrayList al = new ArrayList();

	//Barre de recherche JTextField
    private JTextField tRecherche;    

    //Variable du menuItem de fichier
    private MenuItem scanner;


       public FenetreID3(String titre)
       {

        //Initialise le titre
		super(titre);
                self = this;
		//Initialise la fenetre selon sa taille
		Toolkit outil = Toolkit.getDefaultToolkit();
		Dimension d = outil.getScreenSize();
		//int hauteurEcran = d.height ;
		//int largeurEcran = d.width;
		this.setSize(1000,600);
              
		//On centre la fenêtre
		this.setLocationRelativeTo(null);

		//Initialise les composants
		this.initComposant();

		/*Permet d'ajouter une icone*/
                
		Image img = outil.getImage(FenetreID3.class.getResource("Casque audio.png"));
		this.setIconImage(new ImageIcon(img).getImage());
                

		//Visibilite et fermeture application
		this.setVisible(true);
		this.setResizable(true);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    //Initialise les composants graphiques
    public void initComposant()
	{
		c = this.getContentPane();
 
        JPanel pCentre = this.creePanelCentre();
		c.add(pCentre,"Center");

		JPanel pSud = this.creePanelSud();
		c.add(pSud,"South");

		//JPanel pNord = this.creePanelNord();
		//c.add(pNord,"North");

        //Initialise le menu
		this.initialiseMenu();
	}

        public void remiseAZero()
        {
             modeleGenre.empty();
             modeleAlbum.empty();
             modeleArtiste.empty();
             modeleTitre.empty();
             ta.setText("");
        }

	//Creation du panel Sud
	public JPanel creePanelSud()
	{
            BorderLayout layout = new BorderLayout();

			//Creation de 2 panels 
            JPanel pSud = new JPanel(layout);
            JPanel pSud2 = new JPanel();
            this.ta = new JTextArea(10,10);
            this.ta.setEditable(false);			

			//Creation des buttons Modifier
            JButton bModifier = new JButton("Modifier");
            JButton bSupprimer = new JButton("Supprimer");
            pSud.add(new JScrollPane(this.ta),BorderLayout.NORTH);

            pSud2.add(bModifier,BorderLayout.SOUTH);
            pSud2.add(bSupprimer,BorderLayout.SOUTH);

            pSud.add(pSud2);
            ModifListener ml = new ModifListener();
            bModifier.addActionListener(ml);
            bSupprimer.addActionListener(ml);
            return pSud;
	}

		//Creation du panel Centre
        public JPanel creePanelCentre()
        {
            GridLayout layout = new GridLayout(1,4);
            JPanel pCentre = new JPanel(layout);

            modeleGenre = new ModeleTableAffichage(this.titleGenre);
            modeleAlbum = new ModeleTableAffichage(this.titleAlbum);
            modeleArtiste = new ModeleTableAffichage(this.titleArtiste);
            modeleTitre = new ModeleTableTitre();
            /*modeleGenre.insertRow("Tous les "+titleGenre+"s");
            modeleAlbum.insertRow("Tous les "+titleAlbum+"s");
            modeleArtiste.insertRow("Tous les "+titleArtiste+"s");
            modeleTitre.insertRow("Tous les "+titleTitre+"s");*/

            //Initialise les tableaux et permet de ne pas modifier les cellules
            this.tableAlbum = new JTable(modeleAlbum)
            {
                public boolean isCellEditable(int rowIndex,int colIndex)
                {
                    return false;
                }
            };
            this.tableArtiste = new JTable(modeleArtiste)
            {
                public boolean isCellEditable(int rowIndex,int colIndex)
                {
                    return false;
                }
            };
            this.tableGenre  = new JTable(modeleGenre)
            {
                public boolean isCellEditable(int rowIndex,int colIndex)
                {
                    return false;
                }
            };
            this.tableTitre = new JTable(modeleTitre)
            {
                public boolean isCellEditable(int rowIndex,int colIndex)
                {
                    return false;
                }
            };

            listL = new ListListener();

	    //Ne pas afficher les grilles des JTable
            this.tableGenre.setShowGrid(false);
            this.tableArtiste.setShowGrid(false);
            this.tableAlbum.setShowGrid(false);
            this.tableTitre.setShowGrid(false);

            //Empecher le deplacement des JTable
            this.tableGenre.getTableHeader().setReorderingAllowed(false);
            this.tableArtiste.getTableHeader().setReorderingAllowed(false);
            this.tableAlbum.getTableHeader().setReorderingAllowed(false);
            this.tableTitre.getTableHeader().setReorderingAllowed(false);

            //Permet le tri par ordre croissant ou decroissant des JTable
            this.tableGenre.setAutoCreateRowSorter(true);
            this.tableArtiste.setAutoCreateRowSorter(true);
            this.tableAlbum.setAutoCreateRowSorter(true);
            this.tableTitre.setAutoCreateRowSorter(true);

            //Autorise la sélection multiple
            this.tableAlbum.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableTitre.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableGenre.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableArtiste.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            //Autorise la sélection multiple
            this.tableAlbum.getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableTitre.getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableGenre.getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
            this.tableArtiste.getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

            //Ajout du listener aux colonnes
            this.tableAlbum.getColumnModel().getSelectionModel().addListSelectionListener(listL);
            this.tableGenre.getColumnModel().getSelectionModel().addListSelectionListener(listL);
            this.tableArtiste.getColumnModel().getSelectionModel().addListSelectionListener(listL);

            /*Ajout du listener pour la maj temps réel de la bdd*/
            this.tableGenre.getSelectionModel().addListSelectionListener(listL);
            this.tableArtiste.getSelectionModel().addListSelectionListener(listL);
            this.tableAlbum.getSelectionModel().addListSelectionListener(listL);

            //On ajoute les JTable au panelCentre
            pCentre.add(new JScrollPane(this.tableGenre));
            pCentre.add(new JScrollPane(this.tableArtiste));
            pCentre.add(new JScrollPane(this.tableAlbum));
            pCentre.add(new JScrollPane(this.tableTitre));

            
            //Initialisation du popupMenu
            popup = new JPopupMenu();

            itemBox1 = new JMenuItem("inserer");
            popup.add(itemBox1);
			
            itemBox2 = new JMenuItem("copier");
            popup.add(itemBox2);
            
            
            //Gestionnaire des click droit sur la table Titre
            ClickDroitListener cdl = new ClickDroitListener();
            this.tableTitre.addMouseListener(cdl);
            popup.addMouseListener(cdl);      

            //Action du click droit
            DiapoControlListener dvl = new DiapoControlListener();
            itemBox1.addActionListener(dvl);
            itemBox2.addActionListener(dvl);

            return pCentre;
        }


    //Cree le panel nord
	public JPanel creePanelNord()
	{
		JPanel pNord = new JPanel();
		JPanel radioPanel = new JPanel();
		
		//Creation de la barre de recherche
		this.tRecherche = new JTextField(20);
        JButton bRechercher = new JButton("Rechercher");

		//Creation des RadioButtons
        JRadioButton rbTout = new JRadioButton("Tout",true);
		JRadioButton rbArtiste = new JRadioButton("Artiste");
		JRadioButton rbAlbum = new JRadioButton("Album");
		JRadioButton rbTitre = new JRadioButton("Titre");

		//Initialisation de l'attribut par son nom
		rbTout.setActionCommand("Tout");
		rbArtiste.setActionCommand("Artiste");
		rbAlbum.setActionCommand("Album");
		rbTitre.setActionCommand("Titre");

		//Permet de regrouper les boutons radioButton
		ButtonGroup bg = new ButtonGroup();
		bg.add(rbTout);
		bg.add(rbArtiste);
		bg.add(rbAlbum);
		bg.add(rbTitre);

		//Ajouts des radioButton dans le panel pour RadioButton
		radioPanel.add(rbTout);
		radioPanel.add(rbArtiste);
		radioPanel.add(rbAlbum);
		radioPanel.add(rbTitre);

		//Ajout dans le panel Nord
		pNord.add(bRechercher,BorderLayout.WEST);
		pNord.add(tRecherche);
		pNord.add(radioPanel);

		//Creation d'un listener pour ecouter la recherche
		ModifListener m2  = new ModifListener();
		bRechercher.addActionListener(m2);

		//Creation d'un listener pour ecouter les radioButton
		ReponseListener reponse = new ReponseListener();
		rbTout.addActionListener(reponse);
		rbArtiste.addActionListener(reponse);
		rbAlbum.addActionListener(reponse);
		rbTitre.addActionListener(reponse);

                
		return pNord;

	}

        //Initialisation du Menu
       public void initialiseMenu()
	{
            MenuBar jmb = new MenuBar();
            this.setMenuBar(jmb);

            Menu mFichier = new Menu("Fichier");
            Menu mAffichage = new Menu("Affichage");
            Menu mAide = new Menu("?");

            MenuItem aide = new MenuItem("Aide");
            MenuItem exit = new MenuItem("Quitter");
            scanner = new MenuItem("Scanner");
            MenuItem effacer = new MenuItem("Remise à zéro");
            

            //Sous Menu de changer
            Menu changer = new Menu("Changer de Style ");
            MenuItem gtk = new MenuItem("Style GTK");
            MenuItem metal = new MenuItem("Style Metal");
            MenuItem systeme = new MenuItem("Style Windows");
           
            
            //Sous menu Aide
            mAide.add(aide);

            //Sous menu Scanner
            mFichier.add(scanner);
            //Raccourci pour scanner
            int key1='P';
            MenuShortcut shrt1=new MenuShortcut(key1);
            scanner.setShortcut(shrt1);

            //Sous menu Effacer base de donnee
            mFichier.add(effacer);
            //		Raccourci pour effacer la base
            int key2='E';
            MenuShortcut shrt2=new MenuShortcut(key2);
            effacer.setShortcut(shrt2);

            //Sous menu Changer de Style
            changer.add(gtk);
            changer.add(metal);
            changer.add(systeme);
            mAffichage.add(changer);

            //Sous menu quitter
            mFichier.add(exit);
            //		Raccourci pour quitter
            int key5='Q';
            MenuShortcut shrt5=new MenuShortcut(key5);
            exit.setShortcut(shrt5);

            jmb.add(mFichier);
            jmb.add(mAffichage);
            jmb.add(mAide);

            aide.addActionListener(new MenuListener());
            exit.addActionListener(new MenuListener());
            scanner.addActionListener(new MenuListener());
            effacer.addActionListener(new MenuListener());
            changer.addActionListener(new MenuListener());
	}


        //Methode Aide
       public void aide()
	{
		JDialog aide=new JDialog();
                aide.setTitle("Aide");
                aide.setLocationRelativeTo(null);
		JTextArea ar=new JTextArea("Trieur de Tags ID3\n\nPermet de trier les morceaux musicaux et d'harmoniser leurs tags"
		+"\n\nDéveloppement du logiciel: Equipe 1" +
                        "\n\nInterface graphique : Volkan Kus & Eric Savivahn" +
                        "\n\nBase de données : Mohammed Tall et Thomas Monzie"+
                        "\n\nGestion des tags : Alexandre Faura et Damien Bliah" +
                        "\n\nRéalisé sous la supervision de Laurent Audibert.");
                ar.setEditable(false);
		ar.setFont(new Font("Verdana",Font.BOLD,12));
		ar.setDisabledTextColor(Color.black);
		aide.setSize(500,300);
                //aide.setLocation(new Point(300, 200));
		aide.add(ar);
		aide.setVisible(true);
		aide.setResizable(false);

	}

    private void getDBInfo() throws Exception
    {
        this.modeleAlbum.insertList(dbm.listeColonne("album", null));
        this.modeleArtiste.insertList(dbm.listeColonne("artiste", null));
        this.modeleGenre.insertList(dbm.listeColonne("genre", null));
        this.modeleTitre.insertList(dbm.getSongs("SELECT * FROM songs;"));
    }

    public class ListListener implements ListSelectionListener
    {
        public void valueChanged(ListSelectionEvent e)
        {
            selectedArtists= new ArrayList <String> ();
            selectedAlbums = new ArrayList <String> ();
            selectedGenres = new ArrayList <String> ();           

            int min, max;

            min = tableArtiste.getSelectedRow();
            max = tableArtiste.getSelectionModel().getMaxSelectionIndex();

            int col = 0;

            for(int row = min; row <= max; ++row)
            {
                if(tableArtiste.isCellSelected(row, col))
                {
                    selectedArtists.add(tableArtiste.getValueAt(row, col).toString());
                    //System.out.println("Cellule ("+row+","+col+") : "+tableArtiste.isCellSelected(row, col)+" valeur "+tableArtiste.getValueAt(row, col).toString());
                }
            }

            min = tableAlbum.getSelectedRow();
            max = tableAlbum.getSelectionModel().getMaxSelectionIndex();

            for(int row = min; row <= max; ++row)
            {
                if(tableAlbum.isCellSelected(row, col))
                    selectedAlbums.add(tableAlbum.getValueAt(row, col).toString());
            }

            min = tableGenre.getSelectedRow();
            max = tableGenre.getSelectionModel().getMaxSelectionIndex();

            for(int row = min; row <= max; ++row)
            {
                if(tableGenre.isCellSelected(row, col))
                    selectedGenres.add(tableGenre.getValueAt(row, col).toString());
            }

            /*System.out.println("Selection min "+min+" Selection max "+max);
            for(int i = 0; i < numSel.length; ++i)
            {
                selectedArtists.add(tableArtiste.getValueAt(i, 0).toString());
                System.out.println("Artiste sélectionné à :"+i+" sur "+numSel.length);
            }

            numSel = tableGenre.getSelectedRows();
            for(int i = 0; i < numSel.length; ++i)
            {
                selectedGenres.add(tableGenre.getValueAt(i, 0).toString());
                System.out.println("Genre sélectionné à :"+i);
            }

            numSel = tableAlbum.getSelectedRows();
            for(int i = 0; i < numSel.length; ++i)
            {
                selectedAlbums.add(tableAlbum.getValueAt(i, 0).toString());
                System.out.println("Album sélectionné à :"+i);
            }*/

            modeleTitre.empty();
            try
            {
                //System.out.println(QueryGenerator.genQuery(selectedGenres, selectedArtists, selectedAlbums));
                ArrayList<SongDB>asdb = dbm.getSongs(QueryGenerator.genQuery(selectedGenres, selectedArtists, selectedAlbums));
                for(int i = 0; i < asdb.size(); ++i)
                    modeleTitre.insertRow(asdb.get(i));
            }

            catch (SQLException ex)
            {
               System.err.println(ex.toString());
            }
        }      
    }
        //Action sur le menu
       public class MenuListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			String s = e.getActionCommand();
                        
                        //Scanner la partie ou se trouve les musiques
                         if(s.equals("Scanner"))
                         {
                            FileSystemView vueSysteme = FileSystemView.getFileSystemView();
                                    //récupération des répertoires
                            File home = vueSysteme.getHomeDirectory();
                            
                                    //création et affichage des JFileChooser
                            JFileChooser openDirectory = new JFileChooser(home);
                            openDirectory.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
                            int returnVal = openDirectory.showOpenDialog(c);

                            //On recupere le dossier a scanner
                            if(returnVal == JFileChooser.APPROVE_OPTION)
                            {
                                //System.out.println("You chose to open this scan the directory: " +
                                //openDirectory.getSelectedFile().getName());

                                libraryRoot = openDirectory.getSelectedFile();

                                try
                                {                                    
                                    dbm = new DBManager("songs.db");
                                    JDialog info = new JDialog();
                                    info.setTitle("Scan du répertoire...");
                                    info.setVisible(true);                                   
                                    info.setSize(200, 100);
                                    info.setResizable(false);
                                    info.setLocationRelativeTo(null);
                                    info.add(new JLabel("Scan de l'arborescence du répertoire."));
                                    info.setAlwaysOnTop(true);
                                    //self.setEnabled(false);
                                    dbm.scanner(libraryRoot.getAbsolutePath());
                                    System.out.println("Fin du scan.");
                                    info.setVisible(false);                                   
                                    info = null;
                                    self.setEnabled(true);
                                    //System.out.println("Scan terminé");
                                    self.getDBInfo();
                                    scanner.setEnabled(false);
                                    
                                }

                                catch(Exception ex)
                                {
                                    JDialog error = new JDialog();
                                    error.setSize(200, 100);
                                    error.setResizable(false);
                                    error.setLocation(new Point(500, 500));
                                    error.setTitle("Erreur lors de la création de la base de données");
                                    error.add(new JLabel(ex.getMessage()));
                                }
                            }

                                

                            
	      		/*int sav = openFile.showOpenDialog(null); //on ouvre le filechooser
	      		if(sav != JFileChooser.APPROVE_OPTION) return; //si appui sur autre bouton que OK->fait rien
	      		String openFilePath = openFile.getSelectedFile().getAbsoluteFile().getAbsolutePath(); //on recupere le path du fichier choisi
	      		*/
 
                             /*if(nomFich == null) //Manque une autre condition
                             {
                                 	JOptionPane.showMessageDialog(null,"L'emplacement indiquÃ© n'existe pas" ,"Information", JOptionPane.INFORMATION_MESSAGE);
					setVisible(true);
                             }
                             else
                             {
                                    //A completer par la requete
                             }*/

                         }

                        //Effacer la base de donnee de musiques
                        if(s.equals("Remise à zéro"))
                        {
                            int rep = JOptionPane.showConfirmDialog(null,"Voulez-vous vraiment remettre tout à zéro ?", "Remise à zéro", JOptionPane.YES_NO_OPTION);

                            if(rep == JOptionPane.YES_OPTION)
                            {
					//A completer par la requete
                                       remiseAZero();
                            }
                            else
                            {
                                JOptionPane.showMessageDialog(null,"Cela n'a pas été mis à zéro" ,"Information", JOptionPane.INFORMATION_MESSAGE);
                                setVisible(true);
                            }
                                scanner.setEnabled(true);
                        }

                        //Changer de Style 
                        if(s.equals("Style Metal"))
                        {
                            try
                            {
                                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
                                SwingUtilities.updateComponentTreeUI(c); //update le contener
                                setVisible(true);
                            }
                            catch (Exception ex)
                            {
                                System.err.println(ex);
                            }
                        }
                        else if(s.equals("Style Windows"))
                        {
                            try
                            {
                                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
                                SwingUtilities.updateComponentTreeUI(c);    //Update le contener
                                setVisible(true);
                            }
                            catch (Exception ex)
                            {
                                System.err.println(ex);
                            }
                        }
                        else if(s.equals("Style GTK"))
                        {
                            try
                            {
                                UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
                                SwingUtilities.updateComponentTreeUI(c);    //Update le contener
                                setVisible(true);
                            }
                            catch (Exception ex)
                            {
                                System.err.println(ex);
                            }
                        }




                        //Quitter une partie
			if(s.equals("Quitter"))
			{
                            int rep2 = JOptionPane.showConfirmDialog(null,"Voulez-vous vraiment quitter ?", "Quitter", JOptionPane.YES_NO_OPTION);

                            if(rep2 == JOptionPane.YES_OPTION)
                            {
                                System.exit(0);
                            }
			}

			//Aide
			if(s.equals("Aide"))
			{
				aide();
			}
		}
       }

    /**
     * Action sur les boutons present dans l'interface
     */
    public class ModifListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
                    try
                    {
			String s = e.getActionCommand();

                        if(s.equals("Modifier"))
                        {
                            if(selectedTitres == null||selectedTitres.isEmpty())
                            {
                                throw new Exception("Vous ne pouvez pas modifier une sélection\nvide.");
                            }
                            JPanel pan = new JPanel();
                            pan.setLayout(new GridLayout(3,2));

                            JOptionPane jop1 = new JOptionPane(pan);
                            String lesTextes2[]={"Harmoniser","Annuler"};

                            JCheckBox cArtiste = new JCheckBox("Artiste");
                            JCheckBox cAlbum = new JCheckBox("Album");
                            JCheckBox cGenre = new JCheckBox("Titre");                            

                            JTextField tArtiste = new JTextField(20);
                            JTextField tAlbum = new JTextField(20);
                            JTextField tGenre = new JTextField(20);

                            pan.add(cArtiste);
                            pan.add(tArtiste);
                            pan.add(cAlbum);
                            pan.add(tAlbum);
                            pan.add(cGenre);
                            pan.add(tGenre);

                         int rep2=  jop1.showOptionDialog(c,pan, "Harmoniser",JOptionPane.OK_CANCEL_OPTION,
                JOptionPane.DEFAULT_OPTION,null,lesTextes2,lesTextes2[0]);

                            if(rep2 == JOptionPane.OK_OPTION)
                            {
                                String artiste = null;
                                String album = null;
                                String genre = null;
                                
                                if(cArtiste.isSelected())
                                {
                                    //System.out.println("Artiste a été coché " + tArtiste.getText());
                                    artiste = tArtiste.getText();
                                }
                                if(cAlbum.isSelected())
                                {
                                    //System.out.println("Album a été coché " + tAlbum.getText());
                                    album = tAlbum.getText();
                                }
                                if(cGenre.isSelected())
                                {
                                    //System.out.println("Titre a été coché " + tGenre.getText());
                                    genre = tGenre.getText();
                                }

                               
                                    for(int i = selectedTitres.size() - 1 ; i >= 0; --i)
                                    {
                                         try
                                         {
                                             selectedTitres.get(i).modifieTag(artiste, album, genre);
                                         }
                                         
                                         catch(Exception w)
                                         {
                                             System.err.println(w+" numero "+i+" sur "+selectedTitres.size());
                                         }
                                    }

                               
                                remiseAZero();
                                dbm.createDB();
                                dbm.scanner(libraryRoot.getAbsolutePath());
                                getDBInfo();


                            }                            
                        }
                        if(s.equals("Supprimer"))
                        {
                            selectedTitres = new ArrayList <Song> ();
                            al.clear();
                            ta.setText("");
                           
                        }
                        if(s.equals("Rechercher"))
                        {
                           JOptionPane d = new JOptionPane();
                           
							// les textes figurant sur les boutons

							String lesTextes[]={"Inserer","Annuler"};

							// indice du bouton qui a été cliqué ou CLOSED_OPTION
							String[] data = {"one", "two", "three", "four","one", "two", "three", "four","one", "two", "three", "four"
							,"one", "two", "three", "four","one", "two", "three", "four","one", "two", "three", "four","one", "two", "three", "four",
							"one", "two", "three", "four","one", "two", "three", "four","one", "two", "three", "four","one", "two", "three", "four"};

							JList jl = new JList(data);
 
							JScrollPane jsp = new JScrollPane(jl);

							jsp.setVisible(true);
							d.add(jsp);

							int p = d.showOptionDialog(c,jsp, "Rechercher",JOptionPane.OK_CANCEL_OPTION,
                                JOptionPane.DEFAULT_OPTION,null,lesTextes,lesTextes[0]);

							if(p == JOptionPane.OK_OPTION)
							{
								System.out.println("recherche ok");
								if(reponseRadioButton.equals("Artiste"))
								{
									//A completer par la requete
								}
								else if(reponseRadioButton.equals("Album"))
								{
									//A completer par la requete
								}
								else if(reponseRadioButton.equals("Titre"))
								{
									//A completer par la requete
								}
								else
								{
									//A completer par la requete
								}
							}
                            

                        }                                               
                }

                    catch(Exception ex)
                    {
                            JDialog alertD = new JDialog();
                            alertD.setTitle("Erreur");
                            alertD.setSize(100, 75);
                            alertD.setLocationRelativeTo(null);
                            alertD.add(new JLabel(ex.getMessage()));
                            alertD.setVisible(true);
                            alertD.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
                    }
                }
    }

        //recupere la reponse du RadioButton
        public class ReponseListener implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                reponseRadioButton =e.getActionCommand();
                System.out.println(reponseRadioButton.toString());
            }
        }

		
	//Permet le click droit pour copier ou inserer dans la JtextArea
    public class DiapoControlListener implements ActionListener
    {
             public void actionPerformed(ActionEvent e)
             {
                 //System.out.println("Action : "+e.getActionCommand());
                 String s = e.getActionCommand();
                 /*if(s.equals("copier"))
                 {
                    Toolkit toolkit=Toolkit.getDefaultToolkit();
                    clipboard = getToolkit().getSystemClipboard();
                    int j = 0;
                    textCopier ="";
                    while(j!=tableTitre.getSelectedRowCount())
                    {
			for(int i=0;i<titleTitre.length;i++)
			{
                            textCopier=textCopier+(String)tableTitre.getValueAt(tableTitre.getSelectedRows()[j],i)+" ";
			}
                            textCopier = textCopier + "\n";
                            j++;
                    }
							
                            ss = new StringSelection(textCopier);
                            clipboard.setContents(ss, null);
                 }*/
				 
                 if(s.equals("inserer"))
                 {
                     selectedTitres = new ArrayList <Song> ();
                    int col = 0;
                    int min = tableTitre.getSelectedRow();
                    int max = tableTitre.getSelectionModel().getMaxSelectionIndex();
                    System.out.println("Borne - :"+min+" Borne + :"+max);
                    
                    if(!tableTitre.getSelectionModel().isSelectionEmpty())
                        for(int row=min; row<=max; row++)
                        {
                            if(tableTitre.isCellSelected(row, col))
                            {
                                /*if(modeleTitre.getValueAt(row, col) instanceof String)
                                    System.out.println("Est SongDB : vrai");
                                else System.out.println("Est SongDB : ");*/
                                Song temp;
                                try
                                {
                                    temp = new Song(new File((String) modeleTitre.getValueAt(row, 1)));
                                    //System.out.println("Ajout de : "+temp);
                                    selectedTitres.add(temp);
                                    ta.append(temp.toString());
                                }

                                catch (Exception ex)
                                {
                                   System.err.println(ex);
                                }
                            }
                        }
                    
                    else
                    {
                            JDialog jd = new JDialog();
                            jd.setTitle("Erreur");
                            jd.setSize(100, 75);
                            jd.add(new JLabel("Sélection vide"));
                            jd.setResizable(false);
                            jd.setVisible(true);
                    }
                 }
             }

	
	//Permet de voir le ClickDroit
 /*
	//Permet d'indiquer qu'il ne possède plus le presse-papier
    public void lostOwnership(Clipboard c, Transferable t)
	{
            System.out.println("Lost clipboard");
	}
  */
    }

    public class ClickDroitListener extends MouseAdapter implements MouseListener
    {
            public void mouseClicked(MouseEvent e)
            {
                if (SwingUtilities.isRightMouseButton(e))
                {
                    popup.setVisible(true);
                    popup.show(e.getComponent(), e.getX(), e.getY());
                }
            }
    }
}


